﻿#define _CRT_SECURE_NO_WARNINGS


//交换两个变量（不创建临时变量）
//
//不允许创建临时变量，交换两个整数的内容

//#include <stdio.h>
//
//int main()
//{
//	int a = 10;
//	int b = 15;
//	printf("交换前 ：a = %d,b = %d\n", a, b);
//	//常规思路（效率更高，可读性更高，推荐使用） ：
//	/*int tmp = a;
//	a = b;
//	b = tmp;*/
//
//	//第二种思路(当a+b时，若是a或者b的值很大，会导致a+b溢出，不推荐使用) ：
//	/*a = a + b;
//	b = a - b;
//	a = a - b;*/
//
//	//第三种方法(没有创建临时变量，是题目的最优解，但是，可读性不高，建议使用第一种) ：
//	a ^= b;
//	b ^= a;
//	a ^= b;
//	printf("交换后 ：a = %d, b = %d\n", a, b);
//}

///////////////////////////////////////////////////////////////////////////////////////////////////////

//链接：https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8
//来源：牛客网
//
//[编程题]二进制中1的个数
//热度指数：834470时间限制：C / C++ 1秒，其他语言2秒空间限制：C / C++ 256M，其他语言512M
//算法知识视频讲解
//输入一个整数 n ，输出该数32位二进制表示中1的个数。其中负数用补码表示。
//
//数据范围：
//−
//2
//31
//<
//	=
//	�
//	<
//	=
//	2
//	31
//	−
//	1
//	−2
//	31
//	<= n <= 2
//	31
//	−1
//	即范围为 :
//−
//2147483648
//<
//	=
//	�
//	<
//	=
//	2147483647
//	−2147483648 <= n <= 2147483647
//	示例1
//	输入
//	10
//	输出
//	2
//	说明
//	十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010，其中有两个1。
//	示例2
//	输入
//	- 1
//	输出
//	32
//	说明
//	负数使用补码表示 ， - 1的32位二进制表示为1111 1111 1111 1111 1111 1111 1111 1111，其中32个1

/**
 * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
 *
 *
 * @param n int整型
 * @return int整型
 */
//int NumberOf1(int n) {
//	// write code here
//	int count = 0;
//	int i = 0;
//
//	while (i < 32) {//只统计前31位，因为符号位不在统计范围
//		if (n & 1 == 1)
//		{
//			count++;
//		}
//		n >>= 1;
//		i++;
//	}
//	return count;
//}


////////////////////////////////////////////////////////////////////////////////////
// 
// 
//打印整数二进制的奇数位和偶数位
//
//获取一个整数二进制序列中所有的偶数位和奇数位，分别打印出二进制序列

//#include <stdio.h>
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int i = 0;
//	int x = 0;
//	int a[16] = {0};//偶数位
//	int b[16] = {0};//奇数位
//	int p = 0, q = 0;
//	while (n)
//	{
//		i++;
//		if (n & 1 == 1)
//		{
//			x = 1;
//		}
//		else
//		{
//			x = 0;
//		}
//		if (i % 2 == 0)
//		{
//			a[p++] = x;
//		}
//		else
//		{
//			b[q++] = x;
//		}
//		n >>= 1;
//		
//	}
//	printf("奇数位 ：  ");
//	for (i = 15; i >=0; i--)
//	{
//		printf("%d ", b[i]);
//	}
//	printf("\n偶数位 ：  ");
//	for (i = 15; i >=0; i--)
//	{
//		printf("%d ", a[i]);
//	}
//	return 0;
//}
//
// 
// ////////////////////////////////////////////////////////////////////////////////////////
// 
// 
//链接：https://www.nowcoder.com/questionTerminal/9c3b8a8d9f1c4ae3b709d04625586225
//来源：牛客网
//
//[编程题]两个整数二进制位不同个数
//热度指数：8057时间限制：C / C++ 1秒，其他语言2秒空间限制：C / C++ 64M，其他语言128M
//算法知识视频讲解
//输入两个整数，求两个整数二进制格式有多少个位不同
//
//输入描述 :
//两个整数
//
//
//输出描述 :
//二进制不同位的个数
//示例1
//输入
//22 33
//输出
//5

#include <stdio.h>


int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int i = 0;
	int x = 0;
	int y = 0;
	int p = 0, q = 0;
	int count = 0;
	while (a || b)
	{
		i++;
		if (a & 1 == 1)
		{
			x = 1;
		}
		else
		{
			x = 0;
		}
		if (b & 1 == 1)
		{
			y = 1;
		}
		else
		{
			y = 0;
		}
		a >>= 1;
		b >>= 1;

		if (x != y)
		{
			count++;
		}
	}

	printf("%d", count);
	return 0;
}